import router from '@/router'
import store from '@/store'

// 虚拟进度条导包
import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style
// 导入封装哈ode设置标题组件
import getPageTitle from './utils/get-page-title'

// NProgress.start()  开启进度条
//  NProgress.done()  关闭进度条

// 设置白名单

const widthList = ['/login', '/404']

router.beforeEach(async(to, from, next) => {
  // 动态设置网页标题
  document.title = getPageTitle(to.meta.title)
  // 跳转 开启进度条
  NProgress.start()

  // 从vuex中获取token
  const token = store.state.user.token
  console.log(token)
  if (token) {
    // 有token 可以访问其他页面
    if (to.path === '/login') {
      console.log('已经登陆 禁止进入登录页 跳转首页')
      next('/')
      // 因为从首页进入首页 next指定跳转 不经过钩子函数 所以手动关闭
      NProgress.done()
    } else {
      // 已经登录 直接放行
      // 判断vuex中有无用户信息 没有发送请求 有就直接跳转
      if (!store.state.user.userInfo.userId) {
        // 取反 没有就发送请求
        await store.dispatch('user/setUserInfo')
      }
      // 有就直接跳转
      next()
    }
  } else {
    // 遍历白名单数组 includes 查询数组内是否有相同元素 返回布尔值
    if (widthList.includes(to.path)) {
      // 拥有白名单 直接放行
      next()
    } else {
      // 没有登录 不是白名单 跳转登录页
      next('/login')
      NProgress.done()
    }
  }
})

// 后置路由守卫
router.afterEach((to, next) => {
  // 页面跳转完成 关闭进度条
  NProgress.done()
})
